home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 April / CHIP 1996 aprilis (CD06).zip / CHIP_CD06.ISO / szgyt / mark-1.txt < prev    next >
Text File  |  1996-03-20  |  11KB  |  238 lines

  1. MARK-I
  2.  
  3. Az angol számítástechnika akkor kapott újabb lendületet, mikor a második
  4. világháború befejeztével a német rádióadások megfejtésén dolgozó szakemberek
  5. békésebb munka után néztek. (A rejtjelek megfejtésére több gépet is készítettek
  6. a háború alatt, ezeket azonban kifejezetten kódfeltörésre tervezték. Részletes
  7. mûszaki leírásuk ma is titkos, így nem lehet pontosan megmondani, mennyire
  8. illik rá ezekre a masinákra a "számítógép" név. Az azonban valószínû, hogy e
  9. kutatás kapcsán szerzett tapasztalatoknak hasznát vették az elsô számítógépek
  10. tervezésénél.)
  11.  
  12. Két egykori "kódfeltörô", név szerint F. C. Wiliams és T. Killbrun a
  13. Manchesteri Egyetemen kaptak állást, ahol idejüket egy elektronikus számítógép
  14. összetákolásával töltötték. Valóban "tákolásról" volt szó, nem vesztegették az
  15. idôt a precíz munkára, ami aztán meg is látszott a megbízhatóságon. (A gép alig
  16. pár órát mûködött hiba nélkül: az üzemeltetési napló szerint a folyamatos
  17. hibátlan mûködés rekorja kilenc óra volt.)
  18.  
  19. [Image]
  20.  
  21. A gépen 1948 június 21.-én sikerrel futtatták le a világ elsô programját. A
  22. sikertôl bátorítva a gépet továbbfejlesztették és hamarosan elkészült a nagyobb
  23. tárkapacitású, MARK I névre keresztelt számítógép.
  24.  
  25. A MARK I minden lényeges alapevet és szerkezeti elemet tartalmazott, amelyek a
  26. mai számítógépek alapját képezik. A számokat binárisan ábrázolták, bár manapság
  27. szokásossal éppen ellentétes módon. (A legkisebb helyiértékû bit a bal szélsô.)
  28. A teljes memóriakapacitás 256 szó, a szóhosszúság 40 bit volt. (Kivétel az
  29. akkumulátor, ami 80 bites.) A CPU teljes egészében elektroncsövekbôl (több mint
  30. négyezer darab triódákból és pentódákból) épült fel, 25 kW teljesítményt
  31. fogyasztva.
  32.  
  33. Memóriaként un. Williams-csöveket használtak. Ez a TV képernyôjéhez hasonló
  34. foszforral bevont katódsugárcsô: az elektonsugárral villamos töltést lehet
  35. létrehozni a foszforrétegben, amit ugyancsak az elektronsugár segítségével ki
  36. lehet olvasni. Bármikor bármelyik pontot olvashatjuk vagy írhatjuk, tehát a
  37. szerkezet RAM-ként használható. Mivel a töltés elszivárog, a beírt információt
  38. bizonyos idôközönként frissíteni kell. A Williams csövet éppen az tette
  39. alkalmassá adattárolásra, hogy tervezôjének sikerült viszonylag egyszerû és
  40. megbízható módszert kitalálnia a frissítésre. Az adatokat tároló pontok a
  41. foszfor bevonat miatt világítottak, így szabad szemmel is le lehetett olvasni a
  42. csôbe beírt adatokat. A MARK I-ben használt Williams csövek 32 darab negyven
  43. bites szót tároltak.
  44.  
  45. Ha figyelmesen szemügyre vesszük a MARK I egyik Williams csövének fényképét,
  46. akkor a 32 darab teljes hosszúságú szó mellett a képernyô tetején látunk még
  47. egy 20 bites szót is. Ez a 20 bit a világ elsô "page address"-e. A csövek
  48. tartalmát ugyanis el lehetett menteni egy mágnesdobos ôs-winchesterre, és ez a
  49. cím mondta meg, hogy a másolat a mágnesdob melyik sávjában van. Ebbôl nôtt ki
  50. aztán a virtuális címzés és a "memory swapping".
  51.  
  52. A géppel egy 5 bites lyukszalag olvasón, vagy a mérnöki pulton keresztül
  53. lehetett tárgyalni (ez utóbbi 20 db kapcsolóból állt, amit a gép egy
  54. utasítással le tud olvasni). Kimeneti eszközként egy szalaglyukasztó és egy
  55. nyomtató szolgált.
  56.  
  57. Manchesteri látogatása során a MARK I annyira lenyûgözte a kormány egyik
  58. tudományos tanácsadóját, hogy pár nap alatt tetô alá hozott egy államilag
  59. támogatott programot, amelynek keretében a Ferranti Ltd. vállalat gyártani
  60. kezdte a gépet. Ezzel a MARK I lett a világ elsô sorozatban gyártott,
  61. kereskedelmi forgalomba hozott elektronikus számítógépe. (Nagy üzlet nem
  62. lehetett, hat év alatt kilenc darabot adtak el belôle.)
  63.  
  64. Az elsô Ferranti MARK I-et a Manchesteri Egyetemen helyezeték üzembe, és mivel
  65. a gép teljesítménye meghaladta az egyetem számítási igényeit, külsô
  66. felhasználók számára is végeztek számításokat. Egy Dr. Glennie például az
  67. atombombák tökéletesítéséhez szükséges számításokat végzett a MARK I-en,
  68. természetesen a legnagyobb titokban. (Munka után még a nyomtató festékszalagját
  69. is el kellett égetnie.)
  70.  
  71. Akkoriban még egyetlen programozási nyelv sem létezett, az assembly "fordítást"
  72. maga a programozó végezte úgy, hogy az utasítások bináris kódjainak megfelelô
  73. ASCII karaktereket begépelte egy konzolírógépen. Ezt a módszert Alan Turing
  74. vezette be, aki a háború idején végtelen órákat töltött el a rejtjelezett német
  75. rádióüzenetek öt bites kódjainak bogarászásával, így valószínûleg fel sem tûnt
  76. neki, hogy számítógépe utasításait csupa könnyen megjegyezhetô néven hívják
  77. mint: T/, /N, T:, stb.
  78.  
  79. A felhasználók azonban aligha lehettek ilyen bensôséges viszonban az ASCII
  80. kódtáblával, így az egyik különösen sokat számoló user (történetesen a már
  81. említett atombomba-számításokat végzô Dr. Glennie) 1954-ben saját szakállára
  82. elkészítette a MARK I elsô assembler fordítóját. Ezt követte két évvel késôbb
  83. R. A. Brooker "autocode" nevû nyelve, amely már minden felhasználó számára
  84. rendelkezésre állt.
  85.  
  86. A MARK I gépet több ezer óra hasznos és haszontalan számítás után végül
  87. 1959-ben bontották le. (Túlságosan magas volt az egyetem villanyszámlája :-)
  88. Idôközben sokkal kisebb fogyasztású, nagyobb teljesítményû és olcsóbb gépeket
  89. építettek, így a gép nyolc év alatt teljesen elavulttá vált.
  90.  
  91. A MARK I-et természetesen komoly matematikai számításokra használták, de az
  92. akkor még rendkívû értékes gépidôt már akkoriban elkezdték játékprogramok
  93. fejlesztésére használni. Példaként íme itt egy angol nyevlû szerelmeslevél,
  94. amit a MARK I-en futó program "írt", a gép véletlenszám generátorának
  95. segítségével válogatva össze a kifejezéseket. (Csapnivalóan rossz
  96. szerelmeslevél író vagyok, ezért meg sem kísérlem lefordítani):
  97.  
  98. Darling Sweethart,
  99.  
  100. You are my avid fellow feeling. My affection curiously clings to your
  101. passionate wish. My liging yearns to your hart. You are my wistful symphaty: my
  102. tender liking.
  103.  
  104. Yours beautifully,
  105. Manchester University Computer
  106. -------------------------------------------------------------------------------
  107.  
  108.  
  109. A világ elsô programja
  110.  
  111. Az itt látható programot tartják (az eredeti kéziraton feltüntetett dátum
  112. alapján) a világ legelsô elektronikus számítógépre írt programjának. A program
  113. 1948. június 21.-én produkált elôször használható eredményt, amihez pontosan 52
  114. percre volt szüksége.
  115.  
  116. Az algoritmus egy szám (a) legnagyobb osztóját keresi meg úgy, hogy egy
  117. megadott kezdôértéktôl (b) indulva megvizsgálja, hogy a osztható-e b-vel. Ha
  118. nem, akkor b értékét eggyel csökkenti és újra próbálkozik. (Az oszthatóság
  119. vizsgálata úgy történik, hogy b értékét egy ciklusban levonjuk az a-ból és
  120. megnézzük, hogy a maradék nagyobb-e nullánál.)
  121.  
  122. Az a szám a 23-as, a b kezdôérték pedig a 24-es memóriaszóbam található. A 20,
  123. 21 és 22 szavak a program konstansait tárolják. C jelenti az akkumulátort, cl
  124. pedig a programszámlálót. A test utasítás kihagyja a soron következô utasítást,
  125. ha az akkumulátor tartalma negatív.
  126.  
  127.      no          operation C       25      26    27
  128.  1   -24 to C    -b
  129.  2   C to 26                       -b
  130.  3   -26 to C    b
  131.  4   C to 27                       -b      b
  132.  5   -23 to C    a         r(n-1)  -b(n)   b(n)
  133.  6   sub 27      a - b(n)
  134.  7   test
  135.  8   add 20 to cl
  136.  9   sub 26      r(n)
  137.  10  C to 25               r(n)
  138.  11  -25 to C
  139.  12  test
  140.  13  stop        0         0       -b(N)   b(N)
  141.  14  -26 to C    b(n)      r(n)    -b(n)   b(n)
  142.  15  sub 21      b(n)-1
  143.  16  C to 27     b(n+1)                    b(n+1)
  144.  17  -27 to C    -b(n+1)
  145.  18  C to 26               -b(n+1)
  146.  19  22 to cl              r(n)    -b(n+1) b(n+1)
  147.  
  148.  20 -3
  149.  22 1
  150.  22 4
  151.  
  152.  23 -a
  153.  24 b
  154.  
  155.     initfinal
  156.  25 -   r(N) (=0)
  157.  26 -   -b(N)
  158.  27 -   b(N)
  159.  
  160. Érdemes megfigyelni, hogy a programozónak milyen trükköket kellett bevetnie,
  161. hogy a szegényes utasításkészlettel meg tudja oldani a feladatot. A program a
  162. 13. sorban áll le, a 12. sorban lévô test utasítás miatt akkor kerül ide a
  163. vezérlés, ha az akkumulátorban nulla, vagy annál nagyobb szám van. Az
  164. algoritmusból azonban következik, hogy ezen a ponton az akkumulátor tartalma
  165. csak nulla vagy negatív szám lehet - tehát a progam csak akkor ér véget, ha az
  166. akkumulátor tartalma (vagyis az osztás maradéka) zérus.
  167.  
  168. A MARK I utasításkészlete
  169.  
  170. A gép utasításai 20 bitesek, ebbôl az elsô tíz bit cím, három bit a nyolc darab
  171. "B-line" (index regiszter) kiválasztására szolgál, egy bit nem használt, a
  172. maradék hat pedig az utasítás kódját adja meg.
  173.  
  174. A listában használt rövidítések jelentése a következô:
  175.  
  176. ACC     akkumulátor (80 bites)
  177. AM      az akkumulátor felsô negyven bitje
  178. AL      az akkumulátor alsó negyven bitje
  179. S       az utasítás cím részével megcímzett memóriaszó
  180.         (store line) tartalma. Az indexregiszterekre kiadott
  181.         utasítások csak a 20 legkisebb helyiértékû bitet használják,
  182.         a vezérlésátadó utasítások pedig csak a 10 legkisebb
  183.         helyiértékû bitet.
  184. B       egy B-line (indexregiszter) tartalma
  185. H       a mérnöki pult 20 kapcsolóján beállított bináris szám
  186.  
  187. LDA     load AL (AM cleared)
  188. LDAS    load AL, sign extended into AM
  189. LDN     load AL negatively
  190. STA     store AL
  191. STM     store AM
  192. STMC    store AM and clear AM
  193. SWAP    interchange AM and AL
  194. STAM    store AL, move AM to AL and clear AM
  195. STAC    store AL and clear ACC
  196. CLR     clear ACC
  197. ADD     ACC := ACC + S (signed S)
  198. ADDU    ACC := ACC + S (unsigned S)
  199. SUB     ACC := S (signed S)
  200. ADDM    AM  := AM + S
  201. LDDU    load D (unsigned multiplicant)
  202. LDDS    load D (signed multiplicant)
  203. MADU    ACC := ACC + D x S (unsigned S)
  204. MADS    ACC := ACC + D x S (signed S)
  205. MSBU    ACC := ACC - D x S (usigned S)
  206. MSBS    ACC := ACC - D x S (signed S)
  207. AND     ACC := ACC AND S (S sign extended)
  208. ORA     ACC := ACC OR  S (S sign extended)
  209. NEQ     ACC := ACC XOR S (S sign extended)
  210. SHLS    ACC := 2 x S (arithmetic shift)
  211. ORS     S   := AL OR S, := AL
  212. ORSC    S   := AL OR S, then clear ACC
  213. LDB     load specified B-line
  214. STB     store specfied B-line
  215. SUBB    B := B - S
  216. LDBX    load B-line  (without modification)
  217. STBX    store B-line (without modification)
  218. SBBX    B := B - S   (without modification)
  219. JMPA    absolute indirect unconditional jump
  220. JMPR    relative indirect unconditional jump
  221. JGEA    if ACC positive, absolute indirect jump
  222. JGER    if ACC positive, relative indirect jump
  223. JGBA    if (last-named B-line positive), absolute indirect jump
  224. JGBR    if (last-named B-line positive), relative indirect jump
  225. IOTH    I/O transfer using H as control word
  226. IOTS    I/O transfer using S as control word
  227. NORM    add to AM the position of the most significant one in S
  228. SADD    add to AM the number of 1st in S  - population count
  229. RNDM    load a random number into AL
  230. LDAD    load a page address word into AL
  231. DST1    debugging stop (1)
  232. DST2    debugging stop (2)
  233. TIME    S := clock
  234. HOOT    pulse the console hooter
  235. STH     S := console handswitches H
  236. NULL    no operation
  237.  
  238.